#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//蛇形矩阵(不全)
/*int main()
{
	int arr[1000][1000] = { 0 };
	int i = 0, j = 0;
	int n = 0;
	scanf("%d",&n);
	int k = 1;
	int h = 0, l = 0;//行数，列数
	while (k <= n * n)
	{
		if ((i==0)&&(j % 2 == 0))//向左输入
		{
			arr[i][j] = k;
			k++;
			l++;
		}
		if ((i==0)&&(j % 2 == 1))//向左下输入
		{
			for (i = h;i < n;i++)
			{
				
				arr[i][j--] = k;
				k++;
				l--;
				h++;
				if (k > n * n)
					break;
			}
		}
		if ((j == 0) && (i % 2 == 1))//向下输入
		{
			arr[i][j] = k;
			k++;
			h++;
		}
		if ((j == 0) && (i % 2 == 0))//向右上输入
		{
			for (i = h; i >= 0; i--)
			{
				arr[i][j++] = k;
				k++;
				l++;
				h--;
				if (k > n * n)
					break;
			}
		}

	}
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n; j++)
			printf("%d ", arr[i][j]);
	}
	return 0;
}*/
//蛇形矩阵（完整）
/*int array[1001][1001] = {0};
int main(void)
{
	int n = 0;
	scanf("%d", &n);
	int i = 1, j = 1, k = 0, pos = 1; //pos代表方向移动   1代表右上   -1代表左下
	array[i][j] = 1;
	for (k = 2; k <= n * n; k++)
	{
		if (i == 1 && j < n && pos == 1) //碰到上边界,列增加1,行不变     此后行增,列减
		{
			array[i][++j] = k;
			pos = -1;                 //方向注意
		}
		else if (j == 1 && i < n && pos == -1)//碰到左边界,行增加1,列不变     此后行减,列增
		{
			array[++i][j] = k;
			pos = 1;                     //方向注意                
		}
		else if (j == n && pos == 1) //碰到左边界,行增加1,列不变     此后行增,列减
		{
			array[++i][j] = k;
			pos = -1;                     //方向注意
		}
		else if (i == n && pos == -1) //碰到右边界,列增加1,行不变    此后行减,列增
		{
			array[i][++j] = k;
			pos = 1;
		}
		else if (pos == 1)         //除去上面的边界情况,就是中间移动过程
		{
			array[--i][++j] = k;
		}
		else if (pos == -1)
		{
			array[++i][--j] = k;
		}
	}
	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= n; j++)
			printf("%d ", array[i][j]);
		printf("\n");
	}
	return 0;
}*/
//int main()
//{
//	int arr1[100][100] = { 0 }, arr2[100][100] = { 0 };
//	int i = 0, j = 0, m = 0, n = 0;
//	double k = 0.0;
//	scanf("%d%d", &m, &n);
//	for (i = 0; i < m; i++)
//	{
//		for (j = 0; j < n; j++)
//			scanf("%d", &arr1[i][j]);
//	}
//	for (i = 0; i < m; i++)
//	{
//		for (j = 0; j < n; j++)
//		{
//			scanf("%d", &arr2[i][j]);
//			if (arr2[i][j] == arr1[i][j])
//				k++;
//		}
//	}
//	double x = n * n;
//	printf("%.2lf\n", (k*100.0) / x);
//	return 0;
//}
//int main()
//{
//	int n = 0, i = 0, j = 0, k = 0;
//	int arr[10][10] = { 0 };
//	scanf("%d", &n);
//	for (i = 0; i < n; i++)
//	{
//		for (j = 0; j < n; j++)
//		{
//			scanf("%d", &arr[i][j]);
//			if (i > j && arr[i][j] != 0)
//				k++;
//		}
//	}
//	if (k == 0)
//		printf("YES\n");
//	else
//		printf("NO\n");
//
//	return 0;
//}
//int main()
//{
//	int i = 0, j = 0, m = 0, n = 0, arr[10][10] = { 0 };
//	scanf("%d%d", &n, &m);
//	for (i = 0; i < n; i++)
//	{
//		for (j = 0; j < m; j++)
//		{
//			scanf("%d", &arr[i][j]);
//			printf("%d ", arr[i][j]);
//		}
//		printf("\n");
//	}
//	return 0;
//}
//int main()
//{
//	int i = 0, j = 0, n = 0, m = 0;
//	int arr[10][10] = { 0 };
//	scanf("%d%d", &n, &m);
//	for (i = 0; i < n; i++)
//	{
//		for (j = 0; j < m; j++)
//			scanf("%d", &arr[i][j]);
//	}
//	for (i = 0; i < m; i++)
//	{
//		for (j = 0; j < n; j++)
//			printf("%d ", arr[j][i]);
//		printf("\n");
//	}
//	return 0;
//}
//int main()
//{
//	int n = 0, m = 0, i = 0, j = 0;
//	int arr[10][10] = { 0 }, a = 0, b = 0;
//	char tem = 0;
//	scanf("%d%d", &n, &m);
//	for (i = 0; i < n; i++)
//	{
//		for (j = 0; j < m; j++)
//			scanf("%d", &arr[i][j]);
//	}
//	int k = 0;
//	scanf("%d", &k);
//	for (i = 0; i < k; i++)
//	{
//		scanf(" %c%d%d", &tem, &a, &b);
//		if (tem == 'r')
//		{
//			int x = 0;
//			for (j = 0; j < m; j++)
//			{
//				x = arr[a - 1][j];
//				arr[a - 1][j] = arr[b - 1][j];
//				arr[b - 1][j] = x;
//			}
//		}
//		if (tem == 'c')
//		{
//			int x = 0;
//			for (j = 0; j < n; j++)
//			{
//				x = arr[j][a - 1];
//				arr[j][a - 1] = arr[j][b - 1];
//				arr[j][b - 1] = x;
//			}
//		}
//	}
//	for (i = 0; i < n; i++)
//	{
//		for (j = 0; j < m; j++)
//			printf("%d ", arr[i][j]);
//		printf("\n");
//	}
//	return 0;
//}
//int main()
//{
//	int i = 0, j = 0, n = 0, arr[30][30] = { 0 };
//	scanf("%d", &n);
//	for (i = 0; i < n; i++)
//	{
//		for (j = 0; j <= i; j++)
//		{
//			if (j == 0 || i == j)
//			{
//				arr[i][j] = 1;
//				printf("%5d", arr[i][j]);
//			}
//
//			else
//			{
//				arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
//				printf("%5d", arr[i][j]);
//			}
//		}
//		printf("\n");
//	}
//	return 0;
//}
//int main()
//{
//	char arr[3][3] = { 'o' };
//	int i = 0, j = 0, k = 0, b = 0;
//	for (i = 0; i < 3; i++)//行
//	{
//		for (j = 0; j < 3; j++)
//		{
//			scanf(" %c", &arr[i][j]);
//		}
//	}
//	for (i = 0; i < 3; i++)
//	{
//		if (arr[i][0] == arr[i][1] && arr[i][0] == arr[i][2] && arr[i][0] == 'B')
//		{
//			printf("BoBo wins!\n");
//			return 0;
//		}
//		if (arr[i][0] == arr[i][1] && arr[i][0] == arr[i][2] && arr[i][0] == 'K')
//		{
//			printf("KiKi wins!\n");
//			return 0;
//		}
//	}
//	for (i = 0; i < 3; i++)
//	{
//		if (arr[0][i] == arr[1][i] && arr[0][i] == arr[2][i] && arr[0][i] == 'B')
//		{
//			printf("BoBo wins!\n");
//			return 0;
//		}
//		if (arr[0][i] == arr[1][i] && arr[0][i] == arr[2][i] && arr[0][i] == 'K')
//		{
//			printf("KiKi wins!\n");
//			return 0;
//		}
//	}
//	if (arr[0][0] == arr[1][1] && arr[0][0] == arr[2][2] && arr[0][0] == 'B')
//	{
//		printf("BoBo wins!\n");
//		return 0;
//	}
//	if (arr[0][0] == arr[1][1] && arr[0][0] == arr[2][2] && arr[0][0] == 'K')
//	{
//		printf("KiKi wins!\n");
//		return 0;
//	}
//	if (arr[0][2] == arr[1][1] && arr[0][2] == arr[2][0] && arr[0][2] == 'B')
//	{
//		printf("BoBo wins!\n");
//		return 0;
//	}
//	if (arr[0][2] == arr[1][1] && arr[0][2] == arr[2][0] && arr[0][2] == 'K')
//	{
//		printf("KiKi wins!\n");
//		return 0;
//	}
//	printf("No winner!\n");
//
//
//	return 0;
//}
int main()
{
	int n = 0, m = 0, k = 0;
	int i = 0, j = 0;
	char arr[1000][1000] = { 0 };
	scanf("%d%d", &n, &m);
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
			scanf(" %c", &arr[i][j]);
	}
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			if (arr[i][j] == '*')
				printf("*");
			else
				printf("%d", (arr[i - 1][j - 1] == '*') + (arr[i - 1][j] == '*') + (arr[i - 1][j + 1] == '*') + (arr[i][j - 1] == '*') + (arr[i][j + 1] == '*') + (arr[i + 1][j - 1] == '*') + (arr[i + 1][j] == '*') + (arr[i + 1][j + 1] == '*'));
		}
		printf("\n");
	}
	return 0;
}